package com.gqh.weather.controller;

import com.gqh.weather.domain.dto.ExamRequest;
import com.gqh.weather.domain.dto.StudentInfoDTO;
import com.gqh.weather.domain.dto.StudentLoginRequest;
import com.gqh.weather.exception.Result;
import com.gqh.weather.service.ExamService;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Base64;

/**
 * 考试管理控制器
 */
@Slf4j
@RestController
@RequestMapping("/pingjia/zh/v1/exam")
@Validated
public class ExamController {

    @Autowired
    private ExamService examService;

    /**
     * 学生登录
     *
     * @param request 登录请求
     * @return 学生信息
     */
    @PostMapping("/student/login")
    public Result<StudentInfoDTO> studentLogin(@RequestBody @Valid StudentLoginRequest request) {
        log.info("学生登录，学籍号: {}", request.getStudent_no());
        try {
            // 调用服务方法
            StudentInfoDTO studentInfo = examService.studentLogin(request.getStudent_no(), request.getStudent_name());
            return Result.success(studentInfo);
        } catch (Exception e) {
            log.error("学生登录失败", e);
            return Result.error("学生登录失败: " + e.getMessage());
        }
    }

    // /**
    //  * 上传答案包
    //  *
    //  * @param file 答案包文件
    //  * @return 上传结果
    //  */
    // @PostMapping("/student/upload_answer")
    // public Result<Void> studentUploadAnswer(
    //         @RequestParam("file") @NotNull MultipartFile file) {
    //     log.info("上传答案包，文件名: {}", file.getOriginalFilename());
    //     try {
    //         // 检查文件是否为空
    //         if (file.isEmpty()) {
    //             return Result.error("文件为空");
    //         }

    //         // 获取文件名
    //         String filename = file.getOriginalFilename();
    //         if (filename == null || filename.isEmpty()) {
    //             return Result.error("文件名为空");
    //         }

    //         // 检查文件扩展名
    //         if (!filename.endsWith(".dat")) {
    //             return Result.error("答案包格式不正确,请上传dat格式");
    //         }

    //         // 分割文件名
    //         String[] parts = filename.split("_");
    //         if (parts.length != 5) {
    //             return Result.error("文件名格式不正确");
    //         }

    //         // 解析考试ID
    //         Integer examId;
    //         try {
    //             examId = Integer.parseInt(parts[1]);
    //         } catch (NumberFormatException e) {
    //             return Result.error("文件名格式不正确");
    //         }

    //         // 读取文件内容
    //         byte[] fileData = file.getBytes();
    //         String fileDataStr = new String(fileData);
            
    //         // 解码Base64内容
    //         String decodedData;
    //         try {
    //             byte[] decodedBytes = Base64.getDecoder().decode(fileDataStr);
    //             decodedData = new String(decodedBytes);
    //         } catch (Exception e) {
    //             return Result.error("文件内容不正确");
    //         }

    //         // 构造请求对象
    //         String paperName = parts[2];
    //         String studentNo = parts[3];

    //         // 调用服务方法
    //         examService.studentUploadAnswer(paperName, examId, studentNo, decodedData);
    //         return Result.success(null);
    //     } catch (Exception e) {
    //         log.error("上传答案包失败", e);
    //         return Result.error("上传答案包失败: " + e.getMessage());
    //     }
    // }

    /**
     * 保存学生答案
     */
    @PostMapping("/student/submit")
    public Result<Void> submit(@RequestBody @Valid ExamRequest request) {
        log.info("保存学生答案: {}", request);
        try {

            // 调用服务方法
            examService.studentUploadAnswer(request.getPaperName(), request.getExamId(), request.getStudentNo(), request.getAnswers());
            return Result.success(null);
        } catch (Exception e) {
            log.error("保存学生答案失败", e);
            return Result.error("保存学生答案失败: " + e.getMessage());
        }
    }
}